perm filename PUZZLE[1,JMC] blob sn#005253 filedate 1970-04-13 generic text, type T, neo UTF8
00100	COMMENT COMPUTE THE INDEX OF A POSITION;
00200	
00300	BD←0;
00400	IF A[I1]≠A1 THEN GO TO AL1;
00450	BD←A1;
00500	IF B[I2]≠ B1 THEN GO TO AL2;
00550	BD ← BD LOR A1;
00600	IF B[I3] ≠ B2 THEN GO TO AL3;
00650	BD ← BD LOR B1;
00700	IF B[I4] ≠ B3 THEN GO TO AL4;
00750	BD ← BD LOR B2;
00800	IF B[I5] ≠ B4 THEN GO TO AL5;
00850	BD ← BD LOR B3;
00900	IF C[I6] ≠ C1 THEN GO TO AL6;
00950	BD ← BD LOR B4;
01000	IF D[I7] ≠ D1 THEN GO TO AL7;
01050	BD ← BD LOR C1;
01100	IF D[I8] ≠ D2 THEN GO TO AL8;
01150	BD ← BD LOR D1;
01200	IF D[I9] ≠ D3 THEN GO TO AL9;
01250	BD ← BD LOR D2;
01300	IF D[I10] ≠ D4 THEN GO TO A10;
01350	BD ← BD LOR D3;
01400	OUTSTR("THE POSITION SEEMS TO BE UNCHANGED.  THIS
01500	SHOULD NOT BE. DO NOT PASS GO, DO NOT COLLECT $200.");
01600	GO TO ERROR;
01700	
01800	AL1:
01900	FOR I1←1 STEP 1 WHILE A[I1]≠A1 DO;
02000	N1←I1; BD←A1;
02050	AL2:
02075	N2←1;
02100	FOR I2←1 STEP 1 WHILE B[I2]≠B1 DO
02200	IF B[I2] LAND BD = 0 THEN N2←N2+1;
02300	BD ← BD LOR B1;
02350	AL3:
02375	N3 ← 1;
02400	FOR I3←I2+1 STEP 1 WHILE B[I3]≠B2 DO
02500	IF B[I3] LAND BD = 0 THEN N3←N3+1;
02600	BD← BD LOR B2;
02650	AL4:
02675	N4 ← 1;
02700	FOR I4←I3+1 STEP 1 WHILE B[I4]≠B3 DO
02800	IF B[I4] LAND BD = 0 THEN N4←N4+1;
02900	BD← BD LOR B3;
02950	AL5:
02975	N5 ← 1;
03000	FOR I5←I4+1 STEP 1 WHILE B[I5]≠B4 DO
03100	IF B[I5] LAND BD =0 THEN N5←N5+1;
03200	BD← BD LOR B4;
03250	AL6:
03275	N6 ← 1;
03300	FOR I6←1 STEP 1 WHILE C[I6]≠C1 DO
03400	IF C[I6] LAND BD = 0 THEN N6←N6+1;
03500	BD←BD LOR C1;
03550	AL7:
03575	N7 ← 1;
03600	FOR I7←1 STEP 1 WHILE D[I7]≠D1 DO
03700	IF D[I7] LAND BD =0 THEN N7←N7+1;
03800	BD← BD LOR D1;
03850	AL8:
03875	N8←1;
03900	FOR I8←I7+1 STEP 1 WHILE D[I8]≠D2 DO
04000	IF D[I8] LAND BD = 0 THEN N8←N8+1;
04100	BD ← BD LOR D2;
04150	AL9:
04175	N9←1;
04200	FOR I9←I8+1 STEP 1 WHILE D[I9]≠D3 DO
04300	IF D[I9] LAND BD = 0 THEN N9←N9+1;
04400	BD ← BD LOR D3;
04450	AL10:
04475	N10←1;
04500	FOR I10←I9+1 STEP 1 WHILE D[I10]≠D4 DO
04600	IF D[I10] LAND BD = 0 THEN N10←N10+1;
04700	
04800	N ← N7 +(N8-1)*(N8-2)%2 + (N9-1)*(N9-2)*(N9-3)%6
04900	+ (N10-1)*(N10-2)*(N10-3)*(N10-4)%24 + 15*N6
05000	+ 75*(N2 + (N3-1)*(N3-2)%2 + (N4-1)*(N4-2)*(N4-3)%6
05100	+ (N5-1)*(N5-2)*(N5-3)*(N5-4)%24) + 37125*N1;
05200	
05300	R ← N MOD 36; Q ← N%36;
05400	IF TBL[Q] LAND WD[R] = 0 THEN 
05500	BEGIN TBL[Q]←TBL[Q] LOR WD[R];
05600	GO TO AA1 END;
05700	
05800	COMMENT WE HAVE ALREADY SEEN THIS POSITION;